(function (){

        
    /**
     * @tmp 短信组件模板
     * @param  { string } smsTem 来访记录列表 html字符
     */
    function shortMsgTmp(smsTem){

        return `
            <div style="height:420px;" class="bgWhite l-msg-pupop" >
                <div class="paddingLi"><div class="c999 f_18">
                    第一步，发送短信模板到来访人:
                    </div>
                        ${smsTem}
                    </div>

                <ul class="table-view lineLeft0">
                    <li class="table-view-cell padding10 f_22 l-inline-block">
                        <input type="number" id="_1_veeP" placeholder="请输入对方手机号" class="l-input l-flex-auto" />
                        <button  class=" borderNone l-btn-def l-w-color l-none-radius l-flex-auto" onclick="$app.ttta()">发送模板</button>
                    </li>
                </ul>

                <div class="padding5-15 c999 f_18" >第二步，粘贴短信内容到以下文本框: </div>
                <ul class="table-view padding10">
                    <input  type="text" placeholder="来访人员短信模板" class="l-input" id="_1_vee" />
                </ul>
                <div class="row-fluid padding10" style='margin-bottom: 0;' >
                    <button class="l-btn l-main-bg l-w-color l-btn-long borderNone" onclick="$app.okMsgSend()">导入来访人员</button>
                </div>
            </div>
        `
    }
        

    
    /**
     * @function 短信模板来访人员信息 
     * @param { string } msg 展示信息
     */

    function shortMsgItemTmp(msg){

        return `
            <div class="short-msg-item" style='padding-top: 6px'>
                ${msg}
            </div>
        `
    }
    


    /**
     * @module 事务下拉菜单
     * @param { string | ele } container 容器元素
     * @param { function } tapEvent 元素子项点击触发事件
     */
    class AffairList{   

        constructor(container, tapEvent){
            this.container = $(container)
            this.tapEvent = tapEvent
        }

        /**
         * @function 列表构建及初始化
         * @param { Array } list 数据列表 
         */
        build(list){
            const _this = this;

            $app.pipe(
                list => list.reduce((acc, next) => acc +  _this.affairTmp(next) , ''),
                tmp => _this.container.find('ul').append(tmp),
                () => _this.bindEvent()
            )(list)
        }

        /**
         * @function 子项html模板
         * @param { object } props 渲染数据 
         */
        affairTmp(props){
            return `
                <li style='width: 300px'>
                    <div data-role="BTButton" align="center">
                        ${props.content}
                    </div>
                </li>
            `
        }


        /**
         * @function 是否显示下拉菜单
         * @param { boolean } isOpen 显示开关 
         */
        visibal(isOpen=false){
            this.container[ isOpen ? 'show' : 'hide' ]()
        }



        /**
         * @function 挂载点击事件
         */
        bindEvent(){
            this.container.find('li').on('tap',['li'], (e) => this.tapEvent(e))
        }

    }
    
    

app.section.onReady = function (params) {
    
    var personG = $app.getSession('personG')||[];//读本地存储，再次预约

    ($app.judgeData(personG))&&($('#_nav1_txP').html(''));//如果有值，先清空数据
    personG.forEach(function (val, i) {
        
        if(i==0){
            $('#accS2').val(val.reason);//第一位是事由
        }else{
            var htmlK = $app.okMsgPer(val.name, val.idCard, val.phone, 3);
            $('#_nav1_txP').append(htmlK);//尾部添加
        }
        if(i==1 && $app.judgeData(val.unit)){
           $('#accS6').val(val.unit);//公司
        }
    });
    $app.removeSession('personG');//本地本地存储
};

//页面所有元素加载完成
app.section.onLoad = function () {
    var currYear = (new Date()).getFullYear();
    var dateTime = {
        preset: 'datetime',
        dateFormat: 'yyyy-mm-dd',
        timeFormat: 'HH:ii', //这里使用ii代替分钟mm(避免与月份冲突)
        startYear: currYear, //开始年份
        endYear: currYear + 10, //结束年份
        showNow: true, //是否显示今天的按钮
        nowText: "今天",
        display: 'bottom'
    };
    $("#accS1").datepicker(dateTime);

};

//短信模板
$app.ttta = function () {
    var tel=$app.inputVal('#_1_veeP');

    
    if($app.telCheck(tel)){
        app.phone.sendSMS(tel,$app.smsTem);//发短信
    }else{
        
        $app.alert('请输入正确的手机格式','格式错误',function(){
            $('#_1_veeP').focus();
        });
    }
}



/**
 * @function 首页短信模板组件
 * 
 */
$('#_1_smsTem').on('tap',() =>  {

    const msgList = $app.pipe(
        msg => msg.replace(';(多个来访人请以 ; 隔开)', ''),
        msg => msg.split(';'), 
        list => list.map(shortMsgItemTmp),
        tmps => tmps.reduce((acc, next) => acc+next , '')
    )($app.smsTem)


    ui.popup({
        html: shortMsgTmp(msgList),
        pos: 'bottom',
        showCloseBtn: false
    })
    
    
});



//短信解析
$app.okMsgSend=function(){
    var text=$app.inputVal('#_1_vee');

    if($app.judgeData(text)){
        $app.loading();
        //来访人员数组:姓名，身份证，手机号
        var xArray = $app.mingSS('#_nav1_txP');

        //短信解析
        $ajax.getByMessage(text,function(resData){
            resData.forEach(function(val,i){
                var dK = {
                    name: val.name,
                    idCard: val.idCard,
                    phone: val.phone
                };
                xArray.push(dK);//得到新的数组
            });

            //人员身份证ID，覆盖重复重新渲染dom
            $app.chongFu('#_nav1_txP',xArray,function(){
                ui.closePopup();
            });

            
        });
    }else{
        $app.alert('请粘贴来访人员短信模板','格式错误',function(){
            $('#_1_vee').focus();
        });
    }
    
    
};

/**
 * @function 构建事由下拉列表
 */
const affairInput = $('#accS2')

const affairList = new AffairList('#affair-dropDown-list', $app.pipe(
    e => $(e.target).text(),
    text => $app.trim(text),
    text => affairInput.val(text),
    () => affairList.visibal(false)
))

$ajax.accessCyy(res =>{
    affairList.build(res)
    affairList.visibal(false)
})

/**
 * @function 下拉菜单挂载input 事件控制显示
 */
function affairInputBindEvent(){

    const conf = {
        focus: true,
        blur: false,
        input: false
    }

    Object.keys(conf).forEach( eventType => {

        affairInput.on(eventType, e =>{
            affairList.visibal(conf[eventType])
        })

    })
    
}

affairInputBindEvent()


//来访事由单选判断
$(document).on('tap', '#_1_cyy li', function () {
    var input=$(this).find('input');
    var icon = $(this).find('[data-mark="icon"]');
    if (icon.hasClass('cBlue')) {
        console.log('必须选择1个，不给你取消操作')
    } else {
        icon.addClass('cBlue icon-checkmark').removeClass('cCCC iconfont iconquan');
        //单选操作
        icon.parents('li').siblings().find('[data-mark="icon"]').addClass('cCCC iconfont iconquan').removeClass('cBlue icon-checkmark');
        if(input.length==0){//你选择了常规语句
            $app._1_cyy_qxT();
        }
    }
});

//常用语确定函数
$app._1_cyy_qxT=function() {
    let li = $('#_1_cyy').find('li');
    let jud = false;//判断是否选中
    let who = '';
    let zhi = '';
    
    li.each(function (i, val) {
        var icon = $(val).find('[data-mark="icon"]');

        //蓝色高亮，是我选中那个
        if (icon.hasClass('cBlue')) {
            jud = true;
            who = icon.parent().siblings();

        }
    });

    if (!jud) {
        $app.alert('来访事由不能为空');
    } else {
        if ($(who).find('input').length > 0) {
            zhi = $app.inputVal($(who).find('input'));
        } else {
            zhi = $(who).text();
        }
        if ($app.judgeData(zhi)) {
            ui.closePopup();
            $('#accS2').val(zhi)
        } else {
            $app.alert('来访事由不能为空');
        }
    }
};




// 底部按钮栏位
$('.bottomNav').on('tap', 'button', function () {
    var xu = $(this).parent().index();//0清空，1新增人员，2提交
    if (xu == 0) {
        $app.confirm('清空所有数据？', '温馨提示', {
            yesText: '确定',
            yesFun: function () {
                ui.refresh();
            }
        });

    } else if(xu==1){
        $app.xinZengR();
    } else {
        goOKSuper();
    }
});

//同行人
$('#txP').on('tap', function () {
    $app.removeSession('xArray');//删除同行人，本地本地存储

    //来访人员数组:姓名，身份证，手机号
    var xArray = $app.mingSS('#_nav1_txP');
    ($app.judgeData(xArray)) && ($app.setSession(xArray, 'xArray'));
    ui.load({url: '_1_txP.html'});
});



//完事具备可以提交
function goOKSuper(){
    //获取提交的参数
    var accS1 = $('#accS1').val();//时间
    var accS2 = $app.inputVal('#accS2');//事由
    var accS6 = $app.inputVal('#accS6');//单位


    if (!$app.judgeData(accS1)) {
        $app.alert('来访时间不能为空', '温馨提示', function () {
            $('#accS1').focus();
        });
    } else if (!$app.judgeData(accS2)) {
        $app.alert('来访事由不能为空', '温馨提示', function () {
            $('#accS2').focus();
        });
    } else if (!$app.judgeData(accS6)) {
        $app.alert('单位名称不能为空', '温馨提示', function () {
            $('#accS6').focus();
        });
    } else{
        //来访时间判断
        $app.comeTime("#accS1", function () {
            //可以提交的函数 包裹
            goOKSuperBao(accS1,accS2,accS6);
        });
    }
    
}


//可以提交的函数 包裹
function goOKSuperBao(accS1,accS2,accS6){
    //来访人员数组:姓名，身份证，手机号 已经去重
    var xArray = $app.mingSS('#_nav1_txP');
    if($app.judgeData(xArray)){
        
        //到访公司
        xArray.forEach(function (val, i) {
            val.unit=accS6||'';
        });``

        /**
         * 单人提交补充type值
         */
        if(xArray.length === 1){
            xArray[0] = Object.assign(xArray[0], {type: 1})
        }
        

        //出现主访人select
        if(xArray.length>1){

            const menuList = xArray.map((item, index) =>{
                return { key: index, value: ` ${$app.delSpace(item.name)} [ ${item.phone} ]` }
            })
            
            
            //弹出框
            app.wheelSelect.oneSelect( menuList, 
                function(res){

                var shu=0;
                var keyZ=res.key;
                
                xArray.forEach(function(val,i){

                    if(i == keyZ){
                        val.type=1;
                        shu=i;
                    }else{
                        val.type=0;
                    };
                });

                //数组重新排序

                var strA = xArray.splice(shu,1);
                xArray.unshift(strA[0]);

                console.log('重新排序的数组 = ',xArray);
                xtWc(accS1,accS2,xArray);//最后统一处理

            }, 0, "选择主访人", { "sureBtn": "确定", "cancelBtn": "取消" } );

        }else{
            xtWc(accS1,accS2,xArray);//最后统一处理
        }


        


    }else{
        $app.alert('来访人不能为空');
    }
};


function clearForm(){
    $('#_nav1_txP').html('')
    $('#accS1').val('')
    $('#accS2').val('')
    $('#accS6').val('')                                         
}


//最后统一处理
function xtWc(accS1,accS2,xArray){

    $app.confirm('来访申请一旦提交，将无法修改，<br />确定提交？', '温馨提示', {
        yesText: '确定',
        yesFun: function () {
            var obj = {
                reason: accS2,
                accessTime: accS1,
                persons: JSON.stringify(xArray)
            };

            $app.loading();
            $ajax.accessSave(obj, function (res) {
                clearForm();
                $app.removeSession('status');//删除本地存储
                ui.load({ url: 'nav2.html' });
            });
        }
    });
};



})(window)
